using System;
using System.Collections.Generic;


namespace InterpreteScheme
{
    class Ambiente : Dictionary<string, Expresion>
    {
        Ambiente _outer = null;

        public Ambiente ()
        {
            // :P
        }

        public Ambiente (Ambiente outer, List<Expresion> nombresDeParametros, List<Expresion> valoresDeParametros)
        { 
            //  esto sirve para las lambdas, ver en eval
            //
            _outer = outer;

            for (int i = 0; i < nombresDeParametros.Count; ++ i)
                this.Add (nombresDeParametros[i].texto, valoresDeParametros[i]);
        }

        public Ambiente dameAmbiente (string var)
        { 
            //  Retorna el ambiente en el cual exista la variable "var"
            //
            if (ContainsKey(var))
                return this;
            else if (_outer != null)
                return _outer.dameAmbiente(var);
            else
                throw new Exception(string.Format("Variable no definida -> '{0}'", var));
        }
    }
}
